package com.bbw.act1.v3;

/**
 * 鸭子超类
 *
 * @Author cpw
 * @Date 2023/6/25 16:21
 */
public abstract class Duck {

    protected Flyable flyable;
    protected Quackable quackable;

    /**
     * 用来替代原来的叫声方法
     */
    protected void performQuack() {
        quackable.quick();
    }

    /**
     * 运行时动态设定具体行为
     *
     * @param flyable
     */
    protected void setFlyable(Flyable flyable) {
        this.flyable = flyable;
    }

    /**
     * 用来替代原来的飞行方法
     */
    protected void performFly() {
        flyable.fly();
    }

    /**
     * 运行时动态设定具体行为
     *
     * @param quackable
     */
    protected void setQuackable(Quackable quackable) {
        this.quackable = quackable;
    }

    protected void swim() {
        System.out.println("鸭子游泳");
    }

    /**
     * 每个鸭子的外观都是不同的
     */
    protected abstract void display();

}
